package com.mystudy.concurrent.base;

/**
 * TODO: start方法
 * 1.start 调用的时候有两个线程在运行，因为其中一个是创建新线程的那个线程
 * 2.start 方法最终调用的还是run方法，通过本地方法调用的
 * 3.对于实现的run方法的调用最后通过start方法来调用是一种模板设计模式的体现
 * todo: {@link Thread} 对象构造时候的内部方法 init
 * 1.线程在创建地时候会调用内部的init方法，会默认给线程命名，以Thread-开头，从0开始计数
 * 2.如果在构造Thread的时候没有传递Runnable或者没有复写Thread的run方法该Thread将不会调用任何东西，反之则会调用run方法
 * 3.如果在构造Thread的时候没有指定线程组ThreadGroup，那么就会默认将当前线程加到创建该线程（即父线程）的线程组中，反正则在指定的线程组中
 * todo： {@link Thread}的init方法中的stackSize参数
 * 指定新线程所需的堆栈大小，默认是0，0代表会忽略该参数，该参数会被JNI函数去使用
 * @author acy
 * @since 2019/05/07 17:25
 */
public class TryConcurrency {

	public static void main(String[] args) {
		Thread thread = new Thread(() -> {
			System.out.println(Thread.currentThread().getName());
		}, "THREAD");
		thread.start();
		ThreadGroup threadGroup = thread.getThreadGroup();
		Thread[] threads = new Thread[threadGroup.activeCount()];
		int enumerate = threadGroup.enumerate(threads);
	}
}
